home *** CD-ROM | disk | FTP | other *** search
/ Brotikasten / BROTCD01.iso / c128 / c32.d64 / disk util.-40_80 (.txt) < prev    next >
Commodore BASIC  |  1995-08-08  |  5KB  |  142 lines

  1. 100 REM *******************************
  2. 110 REM
  3. 120 REM         DISK UTILITIES
  4. 130 REM
  5. 140 REM       BY: ROBERT W. BAKER
  6. 150 REM  15 WINDSOR DR, ATCO, NJ 08004
  7. 160 REM
  8. 170 REM *******************************
  9. 180 :
  10. 190 T$(0)="DEL":T$(1)="SEQ":T$(2)="PRG":T$(3)="USR":T$(4)="REL"
  11. 200 DM$(0)="SINGLE": DM$(1)="DOUBLE"
  12. 210 DIM A$(256): NL$=CHR$(0): Q$=CHR$(34): SP$=CHR$(160)
  13. 220 PRINT"[147]      [176][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][174]"
  14. 230 PRINT "      [194]      DISK UTILITIES     [194]"
  15. 240 PRINT "      [173][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][189]"
  16. 250 CLOSE 2: CLOSE 4: CLOSE 15: OPEN 15,8,15
  17. 260 PRINT#15,"U0>M9": INPUT#15,EN
  18. 270 IF EN<>31 THEN DT=0: DM=0: PRINT SPC(11);"DISK DRIVE = 1541": GOTO 300
  19. 280 DT=1: PRINT#15,"U0>H0": INPUT#15,EN: DM=0: IF EN=31 THEN DM=1
  20. 290 PRINT"DISK DRIVE = 1571, IN ";DM$(DM);" SIDED MODE"
  21. 300 PRINT"[195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195]"
  22. 310 PRINT"  1 = NORMAL DIRECTORY     (SIDE 1/2)"
  23. 320 PRINT"  2 = FULL DIRECTORY    (DELETED FILES)"
  24. 330 PRINT"  3 = LOCK/UNLOCK FILE"
  25. 340 PRINT"  4 = CHANGE DISK NAME"
  26. 350 PRINT"  5 = ISSUE DISK COMMAND"
  27. 360 ML=5: AM=(DM+1) AND 1: IF DT=0 THEN PRINT: GOTO 390
  28. 370 PRINT"  6 = SWITCH DRIVE TO ";DM$(AM);" SIDED MODE": ML=6
  29. 380 PRINT SPC(22);"[163][163][163][163][163][163]"
  30. 390 PRINT"  Q = QUIT"
  31. 400 PRINT"[195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195][195]"
  32. 410 PRINT"DESIRED FUNCTION: ";
  33. 420 GET C$: IF C$="" THEN 420
  34. 430 IF C$="Q" THEN PRINT C$: GOTO 1500
  35. 440 F=VAL(C$): IF F<1 OR F>ML THEN 420
  36. 450 PRINT C$: ON F GOTO 550,550,520,550,470
  37. 460 PRINT#15,"U0>M"+CHR$(48+AM): GOTO 220
  38. 470 PRINT"DESIRED DISK COMMAND (IN QUOTES):"
  39. 480 GOSUB 1490: IF X$=SP$ THEN 220
  40. 490 PRINT#15,X$: INPUT#15,EN,EM$,ET,ES
  41. 500 PRINT"ERROR#:";EN;"   TRK/SEC:";ET;"/";ES
  42. 510 PRINT EM$: GOSUB 1450: GOTO 220
  43. 520 PRINT "FILENAME TO BE LOCKED/UNLOCKED:"
  44. 530 GOSUB 1490: IF X$=SP$ THEN 220
  45. 540 FL$=LEFT$(X$+"[160][160][160][160][160][160][160][160][160][160][160][160][160][160][160][160]",16): REM <-- 16 SHIFTED SPACES
  46. 550 PRINT#15,"I0": INPUT#15,EN,EM$,ET,ES: IF EN=0 THEN 580
  47. 560 IF EN<>21 AND ET<>18 AND ES<>0 THEN GOSUB 1440: GOTO 220
  48. 570 PRINT"PLEASE INSERT DISK & RESELECT FUNCTION!": GOTO 1130
  49. 580 OPEN2,8,2,"#0": GOSUB 1430: IF EN>0 THEN 220
  50. 590 PRINT "OK, READING BLOCK AVAIL MAP (BAM)..."
  51. 600 T=18: S=0: GOSUB 1300: IF EN>0 THEN 220
  52. 610 H1$="DISK "+Q$: FOR N=144 TO 159: H1$=H1$+A$(N): NEXT N
  53. 620 H1$=H1$+Q$+"  ID="+A$(162)+A$(163)+"   FMT="+A$(165)+A$(166)
  54. 630 C=0: FOR N=4 TO 140 STEP 4: IF N<>72 THEN C=C+ASC(A$(N))
  55. 640 NEXT N: IF ASC(A$(3))>0 THEN FOR N=221 TO 255: C=C+ASC(A$(N)): NEXT N
  56. 650 H2$=RIGHT$("     "+STR$(C),5)+" BLOCKS FREE        ("
  57. 660 H2$=H2$+DM$(ASC(A$(3))/128)+" SIDED)"
  58. 670 PD=3: IF F>2 THEN 720
  59. 680 PRINT"PRINTED OUTPUT WANTED (Y/N): ";
  60. 690 GET C$: IF C$="N" THEN 720
  61. 700 IF C$<>"Y" THEN 690
  62. 710 PD=4: GOSUB 1220
  63. 720 OPEN 4,PD
  64. 730 GOSUB 1260: IF F<>4 THEN 830
  65. 740 PRINT"ENTER NEW DISK NAME FOR THIS DISK:"
  66. 750 GOSUB 1490: IF X$=SP$ THEN 1200
  67. 760 IF LEN(X$)>16 THEN PRINT"INPUT STRING IS LONGER THAN 16 CHARS!":GOTO 740
  68. 770 X$=LEFT$(X$+"[160][160][160][160][160][160][160][160][160][160][160][160][160][160][160][160]",16): REM <-- 16 SHIFTED SPACES
  69. 780 PRINT#15,"B-P:2,144": GOSUB 1430: IF EN>0 THEN 220
  70. 790 PRINT#2,X$;
  71. 800 PRINT#15,"U2:2,0,";T;S: GOSUB 1430: IF EN>0 THEN 220
  72. 810 PRINT#15,"I0"
  73. 820 PRINT"  DISK BAM UPDATED WITH NEW DISK NAME": GOTO 1130
  74. 830 IF F=3 THEN PRINT"SEARCHING FOR FILE: ";Q$;FL$;Q$: PRINT
  75. 840 T=ASC(A$(0)): S=ASC(A$(1)): IF T>0 THEN 870
  76. 850 IF F=3 THEN PRINT SPC(12);"FILE NOT FOUND"
  77. 860 GOTO 1130
  78. 870 GOSUB 1300: IF EN>0 THEN 220
  79. 880 FOR N=2 TO 226 STEP 32: FT=ASC(A$(N)) AND 7
  80. 890 IF FT=0 AND F<>2 THEN 1190
  81. 900 C=ASC(A$(N+28))+(ASC(A$(N+29))*256)
  82. 910 IF C=0 THEN H=0: FOR X=3 TO 18: H=H+ASC(A$(N+X)): NEXT X: IF H=0 THEN 790
  83. 920 N$="": FOR Y=3 TO 18: N$=N$+A$(N+Y): NEXT Y
  84. 930 IF F=3 THEN IF FL$<>N$ THEN 1190
  85. 940 PRINT#4,RIGHT$("     "+STR$(C),5);" ";Q$;N$;
  86. 950 PRINT#4,Q$;"  ";T$(FT);"  ";: IF FT=0 THEN 1010
  87. 960 LK=0: IF (ASC(A$(N)) AND 192)=192 THEN PRINT#4,"(L)";: LK=1: GOTO 990
  88. 970 OP=0: IF (ASC(A$(N)) AND 128)=0 THEN PRINT#4,"(O)";: OP=1: GOTO 1010
  89. 980 PRINT#4,"   ";
  90. 990 PRINT#4,"  ";
  91. 1000 GOSUB 1330: IF EN>0 THEN 220
  92. 1010 PRINT#4: IF F<>3 THEN 1140
  93. 1020 IF OP=1 THEN PRINT"FILE IS NOT PROPERLY CLOSED!": GOTO 1130
  94. 1030 PRINT"OK TO ";: IF LK=1 THEN PRINT"UN";
  95. 1040 PRINT"LOCK FILE (Y/N): ";
  96. 1050 GET C$: IF C$="N" THEN 1210
  97. 1060 IF C$<>"Y" THEN 1050
  98. 1070 PRINT C$
  99. 1080 H=(ASC(A$(N)) AND 191): IF LK=0 THEN H=H+64
  100. 1090 PRINT#15,"B-P:2,";N: GOSUB 1430: IF EN>0 THEN 220
  101. 1100 PRINT#2,CHR$(H);
  102. 1110 PRINT#15,"U2:2,0,";T;S: GOSUB 1430: IF EN>0 THEN 220
  103. 1120 PRINT"DIRECTORY UPDATED WITH NEW LOCK STATUS"
  104. 1130 PRINT: GOSUB 1450: GOTO 220
  105. 1140 L=L-1: IF L=0 THEN GOSUB 1240: IF C$="Q" THEN 220
  106. 1150 IF PD=3 THEN 1190
  107. 1160 GET C$: IF C$="" THEN 1190
  108. 1170 PRINT SPC(10);"OUTPUT SUSPENDED": GOSUB 1460: IF C$="Q" THEN 220
  109. 1180 GOSUB 1220
  110. 1190 NEXT N: GOTO 840
  111. 1200 PRINT SPC(8);"NO CHANGE TO DISK NAME": GOTO 1130
  112. 1210 PRINT C$: PRINT SPC(8);"NO CHANGE TO DIRECTORY": GOTO 1130
  113. 1220 PRINT"[147]PRINTING DISK DIRECTORY"
  114. 1230 PRINT"PRESS ANY KEY TO PAUSE OUTPUT": RETURN
  115. 1240 IF PD=4 THEN FOR X=1 TO 10: PRINT#4: NEXT X: C$="": GOTO 1260
  116. 1250 GOSUB 1460: IF C$="Q" THEN RETURN
  117. 1260 L=50: IF PD=3 THEN L=16: PRINT"[147]";
  118. 1270 PRINT#4,H1$: PRINT#4: PRINT#4,H2$
  119. 1280 PRINT#4: PRINT#4,"---------------------------------------"
  120. 1290 PRINT#4: RETURN
  121. 1300 PRINT#15,"U1:2,0,";T;S: GOSUB 1430: IF EN>0 THEN RETURN
  122. 1310 FOR N=0 TO 255: GET#2,A$(N): IF A$(N)="" THEN A$(N)=NL$
  123. 1320 NEXT N: RETURN
  124. 1330 EN=0: IF F=3 THEN RETURN
  125. 1340 T=ASC(A$(N+1)): S=ASC(A$(N+2)): GOSUB 1370
  126. 1350 IF (EN+H)>0 OR FT<>4 THEN RETURN
  127. 1360 T=ASC(A$(N+19)): S=ASC(A$(N+20))
  128. 1370 H=0: IF T>35 THEN H=1: PRINT#4,"(2)";: RETURN
  129. 1380 PRINT#15,"U1:2,0,";T;S: GOSUB 1430: IF EN>0 THEN RETURN
  130. 1390 GET#2,C$,D$: IF C$="" THEN C$=NL$
  131. 1400 IF D$="" THEN D$=NL$
  132. 1410 T=ASC(C$): S=ASC(D$): IF T>0 THEN 1370
  133. 1420 RETURN
  134. 1430 INPUT#15,EN,EM$,ET,ES: IF EN=0 THEN RETURN
  135. 1440 PRINT: PRINT"DISK ERROR:[146]";EN;"  TRK/SEC:[146]";ET;"/";ES: PRINT EM$
  136. 1450 PRINT"       PRESS ANY KEY TO CONTINUE       ": GOTO 1470
  137. 1460 PRINT"PRESS ANY KEY TO CONTINUE, 'Q' TO QUIT[146]";
  138. 1470 GET C$: IF C$="" THEN 1470
  139. 1480 RETURN
  140. 1490 PRINT"";SP$;"[157][157][157]";: INPUT X$: RETURN
  141. 1500 CLOSE 2: CLOSE 4: CLOSE 15
  142.